package com.cz.mydao.dao;

import com.cz.mydao.wrapper.DeleteWrapper;
import com.cz.mydao.wrapper.SelectWrapper;
import com.cz.mydao.wrapper.UpdateWrapper;
import java.sql.Connection;
import java.util.List;

/**
 * 功能描述: DAO接口
 * @author 程长
 * @param <T>
 */
public interface Dao<T> {
    /**
     * 获取数据库连接
     * @return 数据库连接
     */
    Connection getConnection();

    /**
     * 根据注解创建表
     * @param tableName 表名
     */
    void createTable(String tableName);

    /**
     * 创建视图方法
     * @param viewName  视图名字
     * @param selectQuery 查询语句
     */
    void createView(String viewName, String selectQuery);

    /**
     * 根据id查询信息并封装到实体类中
     *
     * @param id id
     * @return 实体类
     */
     T queryById(Long id);

    /**
     * 根据ids批量查询
     * @param ids id集合
     * @return 对象集合
     */
    List<T> queryListByIds(List<Long> ids);

    /**
     * 条件查询
     * @param wrapper 查询条件
     * @return  对象集合
     */
    List<T> query(SelectWrapper wrapper);

    /**
     * 分页条件查询
     *
     * @param page     第几页
     * @param pageSize 每页多少条
     * @param wrapper  条件
     * @return 查询结果
     */
    List<T> pageQuery(Long page, Long pageSize, SelectWrapper wrapper);

    /**
     * 插入
     * @param object 要插入的对象
     * @return 影响行数
     */
    Integer insert(T object);

    /**
     * 批量插入
     * @param objectList 要插入的对象列表
     * @return 影响行数
     */
    Integer insertBatch(List<T> objectList);

    /**
     * 默认根据id修改整行数据
     * @param object 修改的数据对象
     * @return 影响行数
     */
    Integer updateById(T object);

    /**
     * 根据条件修改指定列
     *
     * @param wrapper 修改条件
     * @return 影响行数
     */
    Integer update(UpdateWrapper wrapper);

    /**
     * 根据条件删除
     *
     * @param wrapper 条件
     * @return 影响行数
     */
    Integer deleteByCondition(DeleteWrapper wrapper);

    /**
     * 根据id批量删除
     * @param ids id集合
     * @return 影响行数
     */
    Integer deleteById(List<Long> ids);
}
